Alors tout d'abord qu'est ce que le SQL ?? Le SQL est un language devoué a la gestion de base de donnée. ==> traduction : Quand, par exemple, vous vous inscrivez sur un site, toute les info que vous avez entrer pour votre inscription (email, pseudo, mot de passe...etc.) Sont stoquée dans une DB (=> Data base => base de donnés), Et pour acceder a cette DB, modifier son contenu...etc. On utilise le SQL !
Alors, venons en a l'attaque... Mettons un site, dans lequel il y a un champ
de recherche qui vas vous permettre de rechercher un membre... En fait, quand
vous allez cliquer sur le bouton "rechercher", une requette vas
etre envoyé sur la DB.
Requette :
SI dans la partie Membre de la DB il y a un membre qui a pour nom "contenu
du champ de texte" alors on affiche le resultat !
Au lieu de dire "partie membre" je vais employer le therme de
TABLE membre... Alors une table est donc une partie de la DB ! Une DB est
en effet secionné en une ou plusieurs table dans lequel sont stoqué les
information correspondantes !
Par exemple la table membre qui vas contenir votre pseudo et votre mot de
passe
Ou la table NewLetter Qui contiendra votre e-mail !
En SQL la requette aurais resembler a ceci :
SELECT * FROM membres WHERE pseudo = 'ContenuDuCHampDeTextt';
En fait une injection vas viser a deformer cette requette ! Reprenons un
exemple d'un site dans lequel deux champ de texte a renseigner, l'un un pseudo
et l'autre un pass.
Si le pseudo existe dans la DB(plus precisement dans la table membre) ainsi
que le pass, alors on peut continuer...
En SQL :
("SELECT * FROM membres WHERE utilisateur = '$contenuDuChampPseudo' AND motdepasse = '$ContenuDuChampMotDePasse'");
Maintenant, si je met dans le premier champ (le champ pour donner le pseudo) ceci :
' OR 1=1"); //
Notre requette vas resembler a ceci :
("SELECT * FROM membres WHERE utilisateur = '' OR 1=1"); //' AND motdepasse = '$ContenuDuChampMotDePasse'");
On a ici TOTALEMENT deformer la requette, en français ça donne ceci !
Si le pseudo(= Nom Dutilisateur) est egal a '' (et donc rien) OU que 1 est
egal a 1 Alors je continue...
Sachant que tout ce qui suit "//" est considéré comme
une note est donc n'est pas pris en compte !
On a fait ici une injection SQL !
Donc, en reflechissant, on peut avoir tout ce que l'on veut (mot de passe...etc.)
Encore un petit exemple :
login : '; exec master..xp_cmdshell 'net stop firewall'; --
cette requête ci-dessus aurait pour effet d'exécuter une commande shell "net stop firewall" qui stopperait l'exécution du service "firewall" !
A vous de reflechir maintenant !